﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Microsoft.Xna.Framework;
using Twodi.Structs;

namespace Twodi.Interfaces
{
    /// <summary>
    /// Define um componente que possui sprites.
    /// </summary>
    public interface ISprite
    {
        /// <summary>
        /// Nome do sprite atual do componente.
        /// </summary>
        String Name
        {
            get;
            set;
        }

        /// <summary>
        /// Sprite atual do componente.
        /// </summary>
        Sprite Sprite
        {
            get;
        }

        /// <summary>
        /// Lista de sprites disponiveis do componente.
        /// </summary>
        Sprites Sprites
        {
            get;
        }

        /// <summary>
        /// Adicionar sprite na lista de sprites.
        /// </summary>
        /// <param name="sprite">Sprite(s) a ser adicionado.</param>
        void AddSprite(params Sprite[] sprite);

        /// <summary>
        /// Recuperar sprite por nome.
        /// </summary>
        /// <param name="spriteName">Nome do sprite.</param>
        /// <returns></returns>
        Sprite GetSprite(String spriteName);

        /// <summary>
        /// Remover sprite por nome.
        /// </summary>
        /// <param name="spriteName">Nome do sprite.</param>
        void RemoveSprite(String spriteName);

        /// <summary>
        /// Remover sprite por index.
        /// </summary>
        /// <param name="spriteIndex">Index do sprite.</param>
        /// <returns></returns>
        void RemoveSprite(int spriteIndex);

        /// <summary>
        /// Evento invocado quando sprite atual do componente é alterado.
        /// </summary>
        event EventHandler SpriteChanged;

        /// <summary>
        /// Evento invocado quando lista de sprites do componente é alterada.
        /// </summary>
        event EventHandler SpritesChanged;
    }
}
